使用 DS-MDK 開發(fā) NXP iMX7
1). 簡介
NXP i.MX7 處理器是一款具有 Cortex-A7 和 M4 的異構(gòu)多核處理器。A7能夠運(yùn)行 Linux 等操作系統(tǒng),完成 GUI、網(wǎng)絡(luò)、文件管理和算法運(yùn)算等復(fù)雜任務(wù),而 M4 則可以運(yùn)行諸如 FreeRTOS 實(shí)時(shí)操作系統(tǒng)性或者低功耗應(yīng)用。傳統(tǒng)的 Cortex-M 開發(fā)可以借助 JTAG,在線實(shí)時(shí)調(diào)試用戶程序。i.MX7 由于其特殊的架構(gòu),除了要求能夠調(diào)試片上的 M4 外,同時(shí)還需要調(diào)試 A7 運(yùn)行的任務(wù)。ARM 針對此類異構(gòu)多核系統(tǒng)提供了調(diào)試解決方案:DS-MDK。本文就基于Toradex 基于NXP i.MX7處理器發(fā)布的Colibiri.MX7計(jì)算機(jī)模塊來進(jìn)行演示如何使用DS-MDK來調(diào)試i.MX7。
DS-MDK是 ARM 公司針對 32-bit ARM® Cortex®-A 以及 32-bit ARMCortex-A 和 ARM Cortex-M 異構(gòu)系統(tǒng)所推出的開發(fā)環(huán)境,其結(jié)合了DS-5和 CMSIS-Pack 技術(shù)。 目前你可以通過 DS-MDK 和 ULINKpro 調(diào)試開發(fā) Colibrii.MX7 嵌入式計(jì)算機(jī)模塊。DS-MKD 支持在 M4 上單步執(zhí)行、設(shè)置斷點(diǎn)、應(yīng)用重置等功能,在調(diào)試的過程中實(shí)時(shí)查看片上寄存器,保留傳統(tǒng) Cortex-M 的開發(fā)調(diào)試功能。DS-MDK 還可以調(diào)試 Linux 應(yīng)用,捕獲 A7 和 M4 之間的通信。實(shí)現(xiàn)在保持 A7 運(yùn)行的同時(shí),重置 M4 內(nèi)核,方便用戶在線實(shí)時(shí)調(diào)試 M4 上的應(yīng)用。
2). 準(zhǔn)備
a). 軟件準(zhǔn)備
你可以從下面鏈接下載能夠在 DS-MDK 中使用的 Linux 鏡像以及相關(guān)調(diào)試文件。
./ Linux 鏡像:
https://armkeil.blob.core.windows.net/products/Colibri_iMX7_LinuxImageV2.6_20161014_sdcard_files.zip
./ Debug Symbols:
https://armkeil.blob.core.windows.net/products/vmlinux-Colibri-iMX7-20161014.zip
./ Kernel Source:
https://armkeil.blob.core.windows.net/products/kernel-source-Colibri-iMX7-20161014.tar.gz
b). 硬件連接
./ 插入裝有 Linux 鏡像的 SD 卡(參考“FlashingEmbedded Linux”)
./ 使用 RS232(X27)USB 接口連接 ARMCortex-A7
./ 使用 RS232(X25 頂部 UART B)接口連接 ARM Cortex-M4
./ 使用 ULINKpro 連接 JTAG 接口
./ 連接以太網(wǎng)接口,使用 RSE 連接 Linux 系統(tǒng)
./ 連接電源
為了能夠使用 X27 USB 轉(zhuǎn)串口,你需要設(shè)置 J17、J19、J20 和 J21 短路帽。正確連接四個(gè)對應(yīng)的引腳。
3). 創(chuàng)建Linux 鏡像
a). ToradexOpenEmbedded (core) guide 介紹了從源碼編譯 BSP 的具體步驟。
b). 軟件安裝
./ 我們需要一個(gè) Linux 系統(tǒng)來運(yùn)行編譯步驟。當(dāng)然也可以使用 Linux 虛擬機(jī),但是速度將會(huì)很慢。在 Linux 主機(jī)上需要安裝下面的軟件:
----------------------------------
sudo apt-get install libsdl1.2-dev xtermsed cvs
subversion coreutils texi2htmldocbook-utils python-pysqlite2
help2man make gcc g++ desktop-file-utilslibgl1-mesa-dev
----------------------------------
./ 使用 bash 代替系統(tǒng)默認(rèn)的 dash。如果有必要,可以重新配置bash/dash:
----------------------------------
sudo dpkg-reconfigure dash
----------------------------------
./ 安裝 repo 工具
----------------------------------
mkdir ~/bin
curlhttp://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
----------------------------------
c). 編譯鏡像
./ Toradex 有專門的文檔調(diào)試如何從源碼編譯 BSP。在最后使用 bitbake 命令之前,你需要運(yùn)行下面的命令:
----------------------------------
bitbake -c menuconfig linux-toradex
----------------------------------
./ 使用你想要的內(nèi)核配置選項(xiàng)。以.config 文件為例。修改 ~/oe-core/build/out-glibc/work/colibri_imx7-angstrom-linux-gnueabi/linux-toradex/4.1.15-r0/defconfig,創(chuàng)建新的 .config 文件。并用新的配置文件重新編譯和部署內(nèi)核:
----------------------------------
bitbake -c compile -f linux-toradex
bitbake -c deploy linux-toradex
----------------------------------
./ 生成的文件位于~/oe-core/build/out-glibc/deploy/images/colibri-imx7。
./ 按照這里的說明重新燒寫 iMX7 的鏡像。
./ 按照這里的說明配置 u-boot 環(huán)境參數(shù)。
----------------------------------
setenv defargs clk_ignore_unused;
setenv fdt_fixup 'fdt addr ${fdt_addr_r}&& fdt rm /soc/aips-bus@30800000/spba-bus@30800000/serial@30890000';
----------------------------------
4). Linux 內(nèi)核模塊調(diào)試
只需要一些簡單的配置,就可以開始內(nèi)核模塊調(diào)試工作。這一部分內(nèi)容將以 imx_rpmsg_tty 模塊為例,闡述如何進(jìn)行配置。該模塊在 Getting Started with DS-MDK 用戶手冊中的例程項(xiàng)目中有詳細(xì)的說明。
a). 從 i.MX 7 軟件包中復(fù)制并編譯 RPMSG TTY RTX 和 Linux Application TTY 。
./ 下載并解壓 Linux 內(nèi)核符號vmlinux。
./ 下載并解壓內(nèi)核模塊源碼和 object 文件imx_rpmsg_tty.zip。
b). 創(chuàng)建 CMSIS C/C++ 項(xiàng)目
./ 為 i.MX 7 的 Cortex-A7 處理器創(chuàng)建一個(gè)新的 CMSIS C/C++ 項(xiàng)目。名字為 Kernel_Debug
./ 添加兩個(gè) DS-5Debugger 腳本:右擊項(xiàng)目,選擇 New -> Other....
./ 在窗口中選擇 DS-5 Debugger -> DS-5 Debugger Script。 設(shè)置文件名為"stop" 和 "load_ko"。
./ 在 stop.ds 腳本中添加:
----------------------------------
stop
----------------------------------
在 load_ko.ds 腳本中添加:
----------------------------------
add-symbol-file imx_rpmsg_tty.ko
----------------------------------
注意:確認(rèn)腳本文件保存在 workspace 中,DS-MDK 能找到該文件。否則請指定完整的路徑。
./ 第一個(gè)腳本中的 stop 命令會(huì)在加載內(nèi)核符號之前暫停處理器,add-symbol-file 命令可以加載內(nèi)核模塊的 object 文件。
./ 右擊項(xiàng)目,選擇 DebugAs -> CMSIS DS-5 Debugger....
在Connections 選項(xiàng)中,設(shè)置 CPU Instance 為 0 或者SMP。點(diǎn)擊 Advanced 標(biāo)簽,設(shè)置 vmlinux文件路徑并選擇 Load symbols only。 同時(shí)按照下面的圖片,設(shè)置initialization debugger 腳本:
應(yīng)用以上的設(shè)置,并關(guān)閉對話框。
c). 調(diào)試內(nèi)核模塊
下面的步驟將向你介紹如何調(diào)試內(nèi)核模塊:
./ 重啟你的開發(fā)板并停止在 u-boot。
./ 調(diào)試和運(yùn)行 Cortex-M4 應(yīng)用 RPMSG TTY RTX。
./ 啟動(dòng) Linux
./ 在 Linux 命令模式中,運(yùn)行下面命令安裝內(nèi)核模塊: modprobe imx_rpmsg_tty。
./ 調(diào)試和運(yùn)行 Kernel_Debugproject。
./ 現(xiàn)在你可以打開imx_rpmsg_tty.c 并設(shè)置斷點(diǎn)
./ 最后,調(diào)試 Linux Application TTY (確保 RSE 連接任然有效)。當(dāng)開始運(yùn)行應(yīng)用時(shí),debugger 會(huì)停留在之前設(shè)定的斷點(diǎn)。
提交
Verdin AM62 LVGL 移植
基于 NXP iMX8MM 測試 Secure Boot 功能
隆重推出 Aquila - 新一代 Toradex 計(jì)算機(jī)模塊
Verdin iMX8MP 調(diào)試串口更改
NXP iMX8MM Cortex-M4 核心 GPT Capture 測試